import soundfile as sf
import numpy as np


def calculate_rms_db(audio_path):
    """
    计算音频的RMS分贝值（整体或分帧）
    参数:
        audio_path: 音频文件路径
    返回:
        dB: 音频的RMS分贝值
    """
    # 读取音频数据
    y, sr = sf.read(audio_path)

    # 如果是立体声，取左声道（或平均左右声道）
    if y.ndim > 1:
        y = y[:, 0]

    # 计算RMS（均方根）
    rms = np.sqrt(np.mean(y ** 2))

    # 转换为分贝（避免log10(0)错误，加极小值epsilon）
    epsilon = 1e-10
    dB = 20 * np.log10(rms + epsilon)

    return dB


# 示例使用
audio_path = 'output1.wav'
db = calculate_rms_db(audio_path)
print("音频整体RMS分贝:", db, "dB")